' ****** START INCLUDE Rgba Core ******
DIM r0%, g0%, b0%, a0%, r1%, g1%, b1%, a1%

SUB SetRgb0(x%,y%)
    DIM c$
    c$ = RIGHT$("000000" + HEX$(POINT(x%,y%)), 6)
    r0% = VAL("0x" + LEFT$(c$,2))
    g0% = VAL("0x" + MID$(c$,3,2))
    b0% = VAL("0x" + RIGHT$(c$,2))
END SUB

SUB SetRgb1(c&,a%b)
    DIM c$
    c$ = RIGHT$("000000" + HEX$(c&), 6)
    r1% = VAL("0x" + LEFT$(c$,2))
    g1% = VAL("0x" + MID$(c$,3,2))
    b1% = VAL("0x" + RIGHT$(c$,2))
    a0% = 255 - a%b
    a1% = a%b
END SUB

SUB RgbaCorePset(x%,y%)
    PSET(x%,y%), _RGB( [{ (r0%*a0%)+(r1%*a1%) }/255], [{ (g0%*a0%)+(g1%*a1%) }/255], [{ (b0%*a0%)+(b1%*a1%) }/255] )
END SUB
'  ****** END INCLUDE Rgba Core ******

aspect_ratio = 1

Sub RgbaCircle (xc%, yc%, r%, c&, a%b)

    PCOPY 0,-1
    DIM xy&, a&, a_ar&, xy_ar&, y%, x%, x1%, x2%, bFound%
    FOR xy& = 0 TO r%*0.75
        a& = SQR( r% * r% - xy& * xy& )
        a_ar& = a&/aspect_ratio
        xy_ar& = xy&/aspect_ratio
        PSET (xc% + xy&, yc% - a_ar&), &h000001
        PSET (xc% - xy&, yc% - a_ar&), &h000001
        PSET (xc% + xy&, yc% + a_ar&), &h000001
        PSET (xc% - xy&, yc% + a_ar&), &h000001
        PSET (xc% - a&, yc% + xy_ar&), &h000001
        PSET (xc% - a&, yc% - xy_ar&), &h000001
        PSET (xc% + a&, yc% + xy_ar&), &h000001
        PSET (xc% + a&, yc% - xy_ar&), &h000001
    NEXT xy&
    
    SetRgb1(c&, a%b)
    For y% = yc% - r% - 3 TO  yc% + r% + 3
        x1% = xc% - r% - 2
        bFound% = FALSE
        WHILE bFound% = FALSE AND x1% < xc% + r% + 3
           WHILE POINT(x1% + 1, y%) = &h000001 : bFound% = TRUE : x1% = x1% + 1 : WEND
           IF bFound% = FALSE THEN x1% = x1% + 1
        WEND
        If bFound% THEN
          x2% = x1%
          bFound% = FALSE
          WHILE bFound% = FALSE AND x2% < xc% + r% + 3
             IF POINT(x2% + 1, y%) = &h000001 THEN bFound% = TRUE ELSE x2% = x2% + 1
          WEND
          If (bFound% = TRUE) AND ( x2% > (x1%) ) THEN
              FOR x% = x1% + 1 TO x2% : SetRgb0(x%,y%) : RgbaCorePset(x%,y%) : NEXT x%
          END IF
        END IF
    Next x%
    
    FOR xy& = 0 TO r%*0.75
        a& = SQR( r% * r% - xy& * xy& )
        a_ar& = a&/aspect_ratio
        xy_ar& = xy&/aspect_ratio
        x% = xc% + xy& : y% = yc% - a_ar& : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
                         y% = yc% + a_ar& : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
        x% = xc% - a& : y% = yc% + xy_ar& : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
        x% = xc% + a&                     : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
        IF xy& > 0 THEN
        x% = xc% - xy& : y% = yc% - a_ar& : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
                         y% = yc% + a_ar& : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
        x% = xc% - a& : y% = yc% - xy_ar& : PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
        x% = xc% + a& :                     PCOPY(x%, y%) - (x%, y%), -1, 0 : SetRgb0(x%, y%) : RgbaCorePset(x%, y%)
        END IF
    NEXT xy&
    
END SUB

screen _newimage(300, 151, 27)

color , &h505050
cls

for y = 0 to 150 step 4
line (0, y) - (299, y ), &hFFFFFF
next y
RgbaCircle (80, 70, 63, &hFF0000, 150)
RgbaCircle (210, 70, 63, &h00FF00, 150)

END